﻿//#include <iostream>
//
//template<auto Value>
//void printValue() {
//    //std::cout << "Value: " << Value << std::endl;
//    std::cout << "Type: " << typeid(Value).name() << std::endl; // 打印类型名（编译器相关） 
//}
//
//// ⼀个简单的字⾯量类类型 
//struct Point {
//    int x;
//    int y;
//    // 编译器会为我们⽣成⼀个隐式的 constexpr 构造函数 
//    // 析构函数也是隐式 constexpr 的 
//};
//template<auto... Values>
//struct ValueList
//{
//    ValueList()
//    {
//        // 逗号折叠表达式 
//        ((std::cout << Values << ' '), ...);
//    }
//}; // ⼀个编译期的值列表 
//const char arr[] = "hello";
//int main() {
//    printValue<42>(); // auto 被推导为 int 
//    // printValue<3.14>(); // auto 被推导为 double C++20开始才⽀持 
//    printValue<'A'>(); // auto 被推导为 char 
//    printValue<true>(); // auto 被推导为 bool
//    printValue<nullptr>(); // auto 被推导为 nullptr_t 
//    // printValue<"hello">(); // 错误：字符串字⾯量不能作为⾮类型模板参数 
//    printValue<arr>(); // auto 被推导为 const char* 
//    // C++20开始支持字面量类类型作为⾮类型模板参数 
//    // printValue < Point{ 10, 20 } > ();
//    constexpr std::array arr{ 1, 2, 3, 4, 5 };
//    printValue<arr>();
//    // 计算值列表中的值的类型 
//    ValueList<1, 2.2, 'a'> vl;
//    //printValue<string("Hello")>(); // 报错 
//}